#ifndef __PROTOCOL_H
#define __PROTOCOL_H

#include  <stdint.h>
#include  <stdbool.h>
//#include "variable.h"
#include "msg.h"


#define	PROTOCOL_BUF_LEN						 256  //	协议接收缓存区大小
#define	PROTOCOL_DEPTH_LEN					 20   //	协议接收、发送缓存区深度，表示可以存储多少条数据
#define	PROTOCOL_HEAD								 0x26 //	协议消息包头，ASCII码对应字符为“&”
	
// 自定义消息字段 -------------------------------------------------------------------------	
#define	PROTOCOL_CMD_CONNECT_SYNC		 0x43 // 连接信息
#define	PROTOCOL_CMD_DATA_SYNC			 0x45 // 数据帧
#define	PROTOCOL_CMD_REMIND					 0x4D // 测量提醒
#define PROTOCOL_CMD_VERSION_MSG     0x4E // 固件版本描述消息
#define PROTOCOL_CMD_FIRMWARE   		 0x4F // 固件具体内容
#define PROTOCOL_CMD_UPDATE_FINISH   0x50 // 固件更新结束
#define PROTOCOL_CMD_METER_SIGN   	 0x51 // 签名消息帧



// 发送缓存
typedef struct{
	uint8_t depth;  			// 当前深度记录
	uint8_t buff[PROTOCOL_DEPTH_LEN][PROTOCOL_BUF_LEN];			// 消息缓存区
	uint16_t len[PROTOCOL_DEPTH_LEN];			// 接收完成的消息长度	
}PROTOCOL_SEND_T;


// 接收缓存区，暂时没用!!!!!!!!
typedef struct{
	uint8_t buff[PROTOCOL_BUF_LEN];			// 消息缓存区
	uint8_t stat;  	// 解析状态
	uint16_t len;  	// 接收完成的消息长度
	uint8_t index;  // 接收完成的消息当前长度
}PROTOCOL_RE_T;



extern PROTOCOL_SEND_T  protocolSendBuf;
extern PROTOCOL_RE_T 		protocolRecv;
extern bool isGetVersionFlag;


void protocolDeal(MSG_T msg);


// 将对应消息添加一条消息存放到缓存区
void protocolAdd(uint8_t *buf,uint16_t len);
bool protocolSend(void);      // 发送数据，周期调用，调用频率不需要太快


#endif

